{$CLEO .qa}
{$USE CLEO+}
{$USE newOpcodes}
{$USE ini}

0000: NOP

script_name "Ratqa2"

// By ArtemQa146

const
    obj_1 = 31@
    render_1 = 30@
    render_2 = 29@
    distance = 28@
    spawn = 27@
    find = 26@
    obj_find = 25@
    find_kill = 24@
    stopped = 23@
    rANDOM_TIME = 22@
    model_id = 1672 //3065
end

        model.Load(model_id)
        038B: load_requested_models
        0E01: create_object_no_save model_id at 0@ 1@ 2@ offset 0 ground 1 to obj_1
        0F04: create_render_object_to_object_from_special obj_1 special_model 3@ offset 0 0 0 rotation 0 0 0 store_to render_1
        0F04: create_render_object_to_object_from_special obj_1 special_model 4@ offset 0 0 0 rotation 0 0 0 store_to render_2
        0E31: set_render_object_visible render_1 1
        0E31: set_render_object_visible render_2 0
        0E37: set_render_object_scale render_1 5@ 5@ 5@
        0E37: set_render_object_scale render_2 5@ 5@ 5@
        08D2: object obj_1 scale_model 0.0
        timera = 0
        distance = 0.0
        model.Destroy(model_id)
        0208: 1@ = random_float_in_ranges 0.0 360.0
        0177: set_object obj_1 Z_angle_to 1@
        timerb = 0
        0209: rANDOM_TIME = random_int_in_ranges 2000 8000


        repeat
        wait 0
        if
            03CA:   object obj_1 exists
        then

            //    
            if
                0EE6: locate_char_distance_to_object $player_actor object obj_1 radius 45.0
            then
            else
                0108: destroy_object obj_1
                wait 3000
                break
            end


        //       
        if
            001D:   timerb > rANDOM_TIME  // (int)
        then
            timerb = 0
            if
                stopped == false
            then
                stopped = true
                0209: rANDOM_TIME = random_int_in_ranges 2000 4000
            else
                0209: rANDOM_TIME = random_int_in_ranges 5000 15000
                stopped = false
            end
        end


        //  + 
        if
            stopped == false
        then

            //  
            0400: store_coords_to 1@ 2@ 3@ from_object obj_1 with_offset 0.0 0.035 0.25
            02CE: 3@ = ground_z_at 1@ 2@ 3@
            01BC: put_object obj_1 at 1@ 2@ 3@
            distance += 0.035

            //  
            0400: store_coords_to 1@ 2@ 3@ from_object obj_1 with_offset 0.0 0.1 0.3
            0400: store_coords_to 4@ 5@ 6@ from_object obj_1 with_offset 0.0 0.6 0.3
            if
                86BD:   not no_obstacles_between 1@ 2@ 3@ and 4@ 5@ 6@ solid 1 car 0 actor 0 object 0 particle 0
            then
                distance = 6.0
            end

            //  ,    
            if
                distance > 2.5
            then
                0176: 1@ = object obj_1 Z_angle
                1@ += 120.0
                0177: set_object obj_1 Z_angle_to 1@
                distance = 0.0
            end

            // 
            if
                timera < 50
            then
                0E31: set_render_object_visible render_1 1
                0E31: set_render_object_visible render_2 0
            else
                0E31: set_render_object_visible render_1 0
                0E31: set_render_object_visible render_2 1
            end
            if
                timera > 100
            then
                timera = 0
            end
            
        end
        
            0400: store_coords_to 1@ 2@ 3@ from_object obj_1 with_offset -3.0 -3.0 -2.0
            0400: store_coords_to 4@ 5@ 6@ from_object obj_1 with_offset 3.0 3.0 2.0
            if
                0356:   explosion_type -1 in_cube_cornerA 1@ 2@ 3@ cornerB 4@ 5@ 6@
            then
                gosub @Blood
                gosub @Exit
                break
            end
            
            0400: store_coords_to 1@ 2@ 3@ from_object obj_1 with_offset 0.0 0.0 0.0
            06C3: get_number_of_fires_within_sphere_at 1@ 2@ 3@ radius 1.5 store_to 4@
            if
                4@ > 0
            then
                gosub @Blood
                gosub @Exit
                break
            end

        
            //   ,   
            071E: get_object obj_1 health_to 1@
            if
                1@ < 1000
            then
                gosub @Blood
                gosub @Exit
                break
            end


            //  
            find = 0
            while get_any_char_no_save_recursive find progress_to find char_to find_kill
                if 03CA:   object obj_1 exists
                then
                else break
                end
                
                06AC: 1@ = actor find_kill movement_speed
                if and
                    1@ > 1.0
                    0EE6: locate_char_distance_to_object find_kill object obj_1 radius 1.1
                then
                    gosub @Blood
                    gosub @Exit
                    break
                end

            end
            
            
            //  
            find = 0
            while get_any_car_no_save_recursive find progress_to find car_to find_kill
                if 03CA:   object obj_1 exists
                then
                else break
                end
                
                02E3: 1@ = car find_kill speed
                if and
                    0897:   car find_kill collided_with_object obj_1
                    1@ > 0.5
                then
                    gosub @Blood
                    gosub @Exit
                    break
                end

            end


        else
            break
        end
        until not player.Defined(0)
        if 03CA:   object obj_1 exists
        then 01C4: remove_references_to_object obj_1 // This object will now disappear when the player looks away
        end
wait 2000
0A93: terminate_this_custom_script

:Blood
0400: store_coords_to 1@ 2@ 3@ from_object obj_1 with_offset 0.0 0.0 0.0
09B8: create_blood_gush_at 1@ 2@ 3@ with_offset 0.0 0.0 0.0 density 100 on_actor $player_actor
0108: destroy_object obj_1
return

:Exit
timera = 0
repeat
wait 0
if timera > 10000
then break
end
until not locate_char_distance_to_coordinates $player_actor pos 1@ 2@ 3@ radius 30.0
return
